home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2006 December
/
PCWorld_2006-12_cd.bin
/
v cisle
/
robocopy
/
rktools.exe
/
RCDATA
/
CABINET
/
rktools.msi
/
prndata.vbs
< prev
next >
Wrap
Text File
|
2003-04-18
|
13KB
|
582 lines
'----------------------------------------------------------------------
'
' Copyright (c) Microsoft Corporation 1998-2003
' All Rights Reserved
'
' Abstract:
'
' prndata.vbs - printer data configuration script for Windows .NET Server 2003
'
' Usage:
' prndata [-gsx?] [-n name][-k key][-v value][-t int|sz|msz|bin][-d data]"
'
' Examples:
' prndata.vbs -s -n \\server\printer -k TestKey -v TestValue -t msz -d "one" "two"
' prndata.vbs -s -n \\server\printer -k TestKey -v TestValue -t int -d 53
' prndata.vbs -g -n \\server\printer -k TestKey -v TestValue
' prndata.vbs -x -n \\server\printer -k TestKey -v TestValue
'
'----------------------------------------------------------------------
option explicit
'
' Debugging trace flags, to enable debug output trace message
' change gDebugFlag to true.
'
const kDebugTrace = 1
const kDebugError = 2
dim gDebugFlag
gDebugFlag = false
'
' Messages to be displayed if the scripting host is not cscript
'
const kMessage1 = "Please run this script using CScript."
const kMessage2 = "This can be achieved by"
const kMessage3 = "1. Using ""CScript script.vbs arguments"" or"
const kMessage4 = "2. Changing the default Windows Scripting Host to CScript"
const kMessage5 = " using ""CScript //H:CScript //S"" and running the script "
const kMessage6 = " ""script.vbs arguments""."
'
' Operation action values.
'
const kActionUnknown = 0
const kActionSet = 1
const kActionGet = 2
const kActionDel = 3
const kErrorSuccess = 0
const kErrorFailure = 1
main
'
' Main execution start here
'
sub main
on error resume next
dim iAction
dim iRetval
dim oArgs
dim strName
dim strKey
dim strValue
dim strValueType
dim DataArray()
'
' Abort if the host is not cscript
'
if not IsHostCscript() then
call wscript.echo(kMessage1 & vbCRLF & kMessage2 & vbCRLF & _
kMessage3 & vbCRLF & kMessage4 & vbCRLF & _
kMessage5 & vbCRLF & kMessage6 & vbCRLF)
wscript.quit
end if
strKey = ""
strValue = ""
iRetval = ParseCommandLine(iAction, strName, strKey, strValue, strValueType, DataArray)
if iRetval = kErrorSuccess then
select case iAction
case kActionGet
iRetval = GetPrinterData(strName, strKey, strValue)
case kActionSet
iRetval = SetPrinterData(strName, strKey, strValue, strValueType, DataArray)
case kActionDel
iRetval = DelPrinterData(strName, strKey, strValue)
case else
Usage(True)
exit sub
end select
end if
end sub
'
' Get the printer data
'
function GetPrinterData(strName, strKey, strValue)
on error resume next
DebugPrint kDebugTrace, "In GetPrinterData"
DebugPrint kDebugTrace, "Name " & strName
DebugPrint kDebugTrace, "Key " & strKey
DebugPrint kDebugTrace, "ValueName " & strValue
dim oMaster
dim PrinterData
dim iDataType
dim iIndex
dim iRetval
iRetval = kErrorFailure
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
PrinterData = oMaster.PrinterDataGet(strName, strKey, strValue)
if Err = kErrorSuccess then
iRetval = kErrorSuccess
iDataType = VarType(PrinterData)
wscript.echo "Name """ & strName & """"
wscript.echo "Key """ & strKey & """"
wscript.echo "Value """ & strValue & """"
wscript.echo "Printer data:"
'
' Check if the return value is a simple variable or an array
'
if iDataType = vbLong or iDataType = vbString then
wscript.echo PrinterData
'
' Check if array
'
elseif iDataType = (vbArray + vbVariant) then
'
' Check if array of strings
'
if VarType(PrinterData(0)) = vbString then
wscript.echo PrinterData(LBound(PrinterData))
for iIndex = LBound(PrinterData) + 1 to UBound(PrinterData)
wscript.echo PrinterData(iIndex)
next
'
' Check if array of bytes
'
elseif VarType(PrinterData(0)) = vbByte then
PrintBinaryArray PrinterData
end if
else
wscript.echo "Invalid data returned " & iDataType
end if
else
wscript.echo "Error getting " & strKey & " " & Hex(Err.Number) & ". " & Err.Description
end if
GetPrinterData = iRetval
end function
'
' SetPrinterData
'
function SetPrinterData(strName, strKey, strValue, strValueType, PrinterData)
on error resume next
DebugPrint kDebugTrace, "In SetPrinterData"
DebugPrint kDebugTrace, "Name " & strName
DebugPrint kDebugTrace, "Key " & strKey
DebugPrint kDebugTrace, "ValueName " & strValue
DebugPrint kDebugTrace, "ValueType " & strValueType
dim oMaster
dim vntVariant
dim iIndex
dim iRetval
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
'
' We need the veriant in the array to have a certain type
'
select case strValueType
case "int"
vntVariant = CLng(PrinterData(0))
case "sz"
vntVariant = PrinterData(0)
case "msz"
vntVariant = PrinterData
case "bin"
'
' Convert from array of strings to array of bytes
'
for iIndex = LBound(PrinterData) to UBound(PrinterData)
PrinterData(iIndex) = CByte(PrinterData(iIndex))
next
vntVariant = PrinterData
case else
wscript.echo "Invalid type"
exit function
end select
oMaster.PrinterDataSet strName, strKey, strValue, vntVariant
if Err = kErrorSuccess then
wscript.echo "Success setting printer data"
iRetval = kErrorSuccess
else
wscript.echo "Error setting printer data, error " & Hex(Err.Number) & ". " & Err.Description
iRetval = kErrorFailure
end if
SetPrinterData = iRetval
end function
'
' DelPrinterData
'
function DelPrinterData(strPrinter, strKey, strValue)
on error resume next
DebugPrint kDebugTrace, "In DelPrinterData"
DebugPrint kDebugTrace, "Printer " & strPrinter
DebugPrint kDebugTrace, "Key " & strKey
DebugPrint kDebugTrace, "ValueName " & strValue
dim oMaster
dim iRetval
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
'
' Check whether to delete a key or a value
'
if strValue <> "" then
oMaster.PrinterDataDel strPrinter, strKey, strValue
else
oMaster.PrinterKeyDel strPrinter, strKey
end if
if Err = kErrorSuccess then
wscript.echo "Success deleting printer data"
iRetval = kErrorSuccess
else
wscript.echo "Error deleting printer data, error: " & Hex(Err.number) & ". " & Err.Description
iRetval = kErrorFailure
end if
DelPrinterData = iRetval
end function
'
' Displays an array of bytes
'
sub PrintBinaryArray(DataArray)
dim strString
dim iIndex
dim iCount
dim iValue
strString = ""
for iIndex = LBound(DataArray) to UBound(DataArray)
if iIndex <> 0 then
if iIndex mod 16 = 0 then
strString = strString + Chr(13) + Chr(10)
elseif iIndex mod 8 = 0 then
strString = strString + "-"
else
strString = strString + " "
end if
end if
iValue = DataArray(iIndex)
if iValue > 15 then
strString = strString + hex(iValue)
else
strString = strString + "0" + hex(iValue)
end if
next
wscript.echo strString
end sub
'
' Debug display helper function
'
sub DebugPrint(uFlags, strString)
if gDebugFlag = true then
if uFlags = kDebugTrace then
wscript.echo "Debug: " & strString
end if
if uFlags = kDebugError then
if Err <> 0 then
wscript.echo "Debug: " & strString & " Failed with " & Hex(Err)
end if
end if
end if
end sub
'
' Parse the command line into it's components
'
function ParseCommandLine(iAction, strName, strKey, strValueName, strValueType, DataArray)
on error resume next
DebugPrint kDebugTrace, "In the ParseCommandLine"
dim oArgs
dim i
dim j
iAction = kActionUnknown
set oArgs = wscript.Arguments
while i < oArgs.Count
select case oArgs(i)
case "-g"
iAction = kActionGet
case "-s"
iAction = kActionSet
case "-x"
iAction = kActionDel
case "-n"
i = i + 1
strName = oArgs(i)
case "-k"
i = i + 1
strKey = oArgs(i)
case "-v"
i = i + 1
strValueName = oArgs(i)
case "-t"
i = i + 1
strValueType = oArgs(i)
case "-d"
i = i + 1
j = 0
'
' Add all values following -v to the array
'
while i < oArgs.Count
'
' Increase the size of the array and keep all the values
'
redim preserve DataArray(j)
DataArray(j) = oArgs(i)
i = i + 1
j = j + 1
wend
case "-?"
Usage(true)
case else
Usage(true)
end select
i = i + 1
wend
if Err = kErrorSuccess then
ParseCommandLine = kErrorSuccess
else
ParseCommandLine = kErrorFailure
wscript.echo "Error parsing the command line, error: 0x" & hex(Err.NUmber) & ". " &Err.Description
end if
end function
'
' Display command usage.
'
sub Usage(ByVal bExit)
wscript.echo "Usage: prndata [-gsx?] [-n name][-k key][-v value][-t int|sz|msz|bin][-d data]"
wscript.echo "Arguments:"
wscript.echo "-d - data value: must be last option on the line"
wscript.echo "-g - get key value data"
wscript.echo "-k - key name"
wscript.echo "-n - server name or printer name"
wscript.echo "-s - set key vlaue data"
wscript.echo "-t - value type: int for integer, sz for string, msz for multi string, bin for binary data"
wscript.echo "-v - value name. Can be any one of the predefined values for print servers. Ex: ""DefaultSpoolDirectory"" "
wscript.echo " See GetPrinterData in the Platform Software Development Kit for more details"
wscript.echo "-x - delete a key or a value under a key"
wscript.echo "-? - display command usage"
wscript.echo ""
wscript.echo "Examples:"
wscript.echo "prndata.vbs -s -n \\server\printer -k TestKey -v TestValue -t msz -d ""one"" ""two"""
wscript.echo "prndata.vbs -s -n \\server\printer -k TestKey -v TestValue -t int -d 53"
wscript.echo "prndata.vbs -g -n \\server\printer -k TestKey -v TestValue"
wscript.echo "prndata.vbs -x -n \\server\printer -k TestKey -v TestValue"
wscript.echo "prndata.vbs -x -n \\server\printer -k TestKey"
wscript.echo "prndata.vbs -g -n \\server -v MajorVersion"
if bExit <> 0 then
wscript.quit(1)
end if
end sub
'
' Determines which program is used to run this script.
' Returns true if the script host is cscript.exe
'
function IsHostCscript()
on error resume next
dim strFullName
dim strCommand
dim i, j
dim bReturn
bReturn = false
strFullName = WScript.FullName
i = InStr(1, strFullName, ".exe", 1)
if i <> 0 then
j = InStrRev(strFullName, "\", i, 1)
if j <> 0 then
strCommand = Mid(strFullName, j+1, i-j-1)
if LCase(strCommand) = "cscript" then
bReturn = true
end if
end if
end if
if Err <> 0 then
call wscript.echo("Error 0x" & hex(Err.Number) & " occurred. " & Err.Description _
& ". " & vbCRLF & "The scripting host could not be determined.")
end if
IsHostCscript = bReturn
end function